package com.shujia.wyh.day03;

/*
        代码格式化的快捷键：ctrl+alt+l

        面试题
        byte b1=3,b2=4,b;
        b=b1+b2;
        b=3+4;
        哪句是编译失败的呢？为什么呢？

        变量相加，首先会提升数据类型相加，byte-short-char在参与运算的时候首先会提升到int类型，然后再参与运算
        常量相加，首先会先相加，得到一个值，然后看一看这个值是否在接收范围内，如果在，直接赋值，如果不在，报错。


     思考题：
        byte b = (byte)130;  结果是多少

        分析：
            首先，我们知道数据在计算机中是以补码的形式参与运算的，所以我们要得到130的补码
            而要想知道补码，就必须知道反码和原码。
            而又因为原码，反码，补码是针对二进制来计算的，所以我们要求出130的二进制
            130的二进制：10000010
            又因为整数默认是int类型，130是正数，所以4个字节，它的原码，反码，补码是一样的
            130的补码：00000000 00000000 00000000 10000010
            然后我们做了强制类型转换操作，实际上做的是截取操作
            这个是补码：10000010
            因为最高位是1，所以我们要已知补码求原码
                    符号位        数值位
             补码：    1          0000010
             反码：    1          0000001
             原码：    1          1111110

             -(64+32+16+8+4+2) = -126


 */
public class DataTypeDemo4 {
    public static void main(String[] args) {
        byte b1 = 3;
        byte b2 = 4;
        byte b;

        b = (byte) (b1 + b2);
        b = 3 + 4;

        b = (byte) (127 + 3);
        System.out.println(b);

        b = (byte) 131;
        System.out.println(b);


    }
}
